/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package jcac_1_0.util;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.List;

/**
 * JSON通用类
 * @author SoChishun
 * @version 1.0 2016-5-18
 * @see http://blog.csdn.net/accountwcx/article/details/24585987
 */
public class JsonUtil {
    
    /**
     * JSON序列化
     * @param object
     * @return
     * @throws JsonProcessingException 
     * @version 1.0 2016-5-18
     */
    public static String serialize(Object object) throws JsonProcessingException  
    {
        /** 
         * ObjectMapper是JSON操作的核心，Jackson的所有JSON操作都是在ObjectMapper中实现。 
         * ObjectMapper有多个JSON序列化的方法，可以把JSON字符串保存File、OutputStream等不同的介质中。 
         * writeValue(File arg0, Object arg1)把arg1转成json序列，并保存到arg0文件中。 
         * writeValue(OutputStream arg0, Object arg1)把arg1转成json序列，并保存到arg0输出流中。 
         * writeValueAsBytes(Object arg0)把arg0转成json序列，并把结果输出成字节数组。 
         * writeValueAsString(Object arg0)把arg0转成json序列，并把结果输出成字符串。 
         */  
        ObjectMapper mapper = new ObjectMapper();  
        return mapper.writeValueAsString(object);  
    }
    
    /**
     * JSON反序列化
     * @param <T>
     * @param c
     * @param json
     * @return 返回
     * @throws IOException 
     * @version 1.0 2016-5-18
     */
    public static <T> T deserialize(Class<T> c,String json) throws IOException{
        /** 
         * ObjectMapper支持从byte[]、File、InputStream、字符串等数据的JSON反序列化。 
         */  
        ObjectMapper mapper = new ObjectMapper(); 
        T t = mapper.readValue(json, c);
        return t;
    }
}
